home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / files.swg / 0027_Wipe file from Disk.pas < prev    next >
Pascal/Delphi Source File  |  1993-08-27  |  2KB  |  76 lines

  1. {
  2. > I'm looking For a turbo pascal routine that will wipe Files
  3. > off of disks the way (or similar to the way) that Norton's
  4. > Wipeinfo wipe's Files.  I'd like the call to be something
  5. > like wipeFile(fn:String);  Preferrably, I would also like
  6. > the deleted directory entry wiped to prevent one from seeing
  7. > what the File that used to be there was named, or how large
  8. > it was.  Any help would greatly be appreciated.
  9.  
  10. > Here is my wipe File. The directory entry is not cleared.
  11. Well, today an idea occured: clearing directory entries is not as
  12. difficult as I tought. No Assembler needed, no strange Dos calls, just
  13. plain TP. Here an updated version. Even the CIA won't get your Files
  14. back!
  15. }
  16.  
  17. Procedure DosWipe(Path : PathStr);
  18. { wipes Files according to Department of Defense standard DOD 5220.22-M }
  19. Var
  20.   DataFile : File;
  21.   DirInfo  : SearchRec;
  22.  
  23.   Procedure WipeFile(Var DataFile : File);
  24.   Const
  25.     NullByte : Byte = 0;
  26.     FFByte   : Byte = $FF;
  27.     F6Byte   : Byte = $F6;
  28.   Var
  29.     Result : Word;
  30.     Count  : Byte;
  31.     Count2 : LongInt;
  32.   begin
  33.     Reset(DataFile, 1);
  34.     For Count := 1 to 3 do
  35.     begin
  36.       Seek(DataFile,0);
  37.       For Count2 := 0 to FileSize(DataFile) - 1 do
  38.         BlockWrite(DataFile, FFByte, 1, result);
  39.       Seek(DataFile,0);
  40.       For Count2 := 0 to FileSize(DataFile) - 1 do
  41.         BlockWrite(DataFile, NullByte, 1, result);
  42.     end;
  43.  
  44.     Seek(DataFile, 0);
  45.     For Count := 0 to FileSize(DataFile) - 1 do
  46.       BlockWrite(DataFile, F6Byte, 1, result);
  47.     Close(DataFile);
  48.   end;
  49.  
  50.   Procedure ClearDirEntry;
  51.   begin
  52.     Reset(DataFile);
  53.     Truncate(DataFile);                  { erase size entry }
  54.     Close(DataFile);
  55.     Rename(DataFile, 'TMP00000.$$$');    { erase name entry }
  56.   end;
  57.  
  58. Var
  59.   D : DirStr;
  60.   N : NameStr;
  61.   E : ExtStr;
  62. begin
  63.   FSplit(Path, D, N, E);
  64.   FindFirst(Path, Archive, DirInfo);
  65.  
  66.   While DosError = 0 do
  67.   begin
  68.     Assign(DataFile, D+DirInfo.Name);
  69.     WipeFile(DataFile);
  70.     ClearDirEntry;
  71.     Erase(DataFile);
  72.     FindNext(DirInfo);
  73.   end;
  74. end;
  75.  
  76.